/*
 * File Name:               XAsyncUtils.cs
 * 
 * Description:             普通类
 * Author:                  lisiyu
 * Create Date:             2016/06/28
 */

using System;
using UnityEngine;

//
// 摘要:
//     异步方案的接口集中,方便使用
//     
public class XAsyncUtils
{
    private static XAsyncHelper mAsyncHelper;
    private static XAsyncHelper AsyncHelper
    {
        get
        {
            if (mAsyncHelper == null)
            {
                new GameObject("[AsyncHelper]").AddComponent<XAsyncBehavior>();
                mAsyncHelper = XAsyncHelper.Singleton;
            }

            return mAsyncHelper;
        }
    }

    //
    // 摘要:
    //     异步执行
    public static void runAsync(Action callback)
    {
        AsyncHelper.runAsync(callback);
    }

    //
    // 摘要:
    //     同步执行
    public static void runSync(Action callback)
    {
        AsyncHelper.runSync(callback);
    }

    //
    // 摘要:
    //     在支线程内完成替换操作
    //
    // 参数:
    //     onHandle: 替换操作
    //     onDefault: 默认情况
    // 
    // 返回结果:
    //     XProperty包装下的资源
    public static XProperty<T> runAsync<T>(XAsyncEntity<T>.AsyncHandle<T> onHandle, XAsyncEntity<T>.AsyncDefault<T> onDefault)
    {
        return XAsyncEntity<T>.runAsync(onHandle, onDefault);
    }

    //
    // 摘要:
    //     在主线程中完成替换操作
    //
    // 参数:
    //     onHandle: 替换操作
    //     onDefault: 默认情况
    // 
    // 返回结果:
    //     XProperty包装下的资源
    public static XProperty<T> runSync<T>(XAsyncEntity<T>.AsyncHandle<T> onHandle, XAsyncEntity<T>.AsyncDefault<T> onDefault)
    {
        return XAsyncEntity<T>.runSync(onHandle, onDefault);
    }
}